home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 031-040 / amok39 / oberon-forum / oca-demo / oberonpointer.mod < prev    next >
Text File  |  1993-11-04  |  4KB  |  116 lines

  1. (*---------------------------------------------------------------------------
  2.     :Program.    : OberonPointer.mod
  3.     :Author.     : Jochen P. Kupfer
  4.     :Address.    : Buchenweg 22, D-4006 Erkrath 2
  5.     :Phone.      : (0)2104-40673
  6.     :Shortcut.   : SIGMA
  7.     :Version.    : 1.0
  8.     :Date.       : 31-Mai-90
  9.     :Copyright.  : © 1989, Vertrieb nur auf der GetiT oder kostenlos!
  10.     :Language.   : Oberon
  11.     :Translator. : Oberon Compiler V0.9 01-Mar-90, sollte auch mit der
  12.     :Translator. : Demo-Version 1.0 funktionieren
  13.     :Contents.   : Demo zur Verwendung von C- und Assembler-Modulen
  14.     :Contents.   : zusammen mit einem Oberon-Modul.
  15.     :Contents.   : Zeigt die Anwendung symbolischer Adressen bei
  16.     :Contents.   : Variablen und Prozeduren.
  17.     :Remark.     : Start vom CLI: [RUN] OberonPointer <RETURN>
  18.     :Remark.     : Start von der Wb: Doppelklick auf das Icon.
  19. ---------------------------------------------------------------------------*)
  20.  
  21. MODULE OberonPointer;
  22. (* Oberon Compiler V0.9 01-Mar-90
  23.    © 1989 by Fridtjof Siebert. [intern]
  24. *)
  25.  
  26. IMPORT i : Intuition,      (* Abkürzungen *)
  27.        g : Graphics,
  28.        e : Exec,
  29.        d : Dos,
  30.        r : Requests,
  31.        s : SYSTEM;
  32.  
  33. TYPE
  34.   PDATA = ARRAY 18 OF LONGINT;
  35.  
  36. VAR
  37.   BP["_SpriteData"]   : POINTER TO PDATA;  (* C-Datas *)
  38.   wPtr                : i.WindowPtr;
  39.   text["_IText1"]     : i.IntuiText;       (* C-Datas *)
  40.   text2["_MText"]     : i.IntuiText;       (* C-Datas *)
  41.   nw["MyWindow"]      : i.NewWindow;       (* asm-Datas *)
  42.   rastPortPtr         : g.RastPortPtr;
  43.   j                   : INTEGER;           (* Zähler  *)
  44.  
  45. PROCEDURE QuickNDirty{"Start"}; (* kleiner asm-Screenhack
  46.                                    von der Disk MACRO-PD-SOFT # 9 *)
  47.  
  48. PROCEDURE Clear;  (* clear Text im Window *)
  49.   BEGIN
  50.     g.SetAPen(rastPortPtr,0);
  51.     g.RectFill(rastPortPtr,2,11,410,105);
  52. END Clear;
  53.  
  54. PROCEDURE ProcessIDCMP;
  55.   VAR
  56.     imPtr : i.IntuiMessagePtr;
  57.     class : LONGSET;
  58.   BEGIN
  59.     LOOP
  60.       e.WaitPort(wPtr.userPort);
  61.       imPtr := e.GetMsg(wPtr.userPort);
  62.       class:=imPtr.class;
  63.       e.ReplyMsg(imPtr);
  64.       IF i.newSize     IN class THEN Clear;
  65.                        (* Text neu zeichnen, könnte gelöscht sein *)
  66.                        i.PrintIText(rastPortPtr,s.ADR(text),0,0);
  67.                        d.Delay(10);
  68.                        i.RefreshWindowFrame(wPtr) END;
  69.       IF j = 1 THEN j := 0 ELSE  (* make shure window doesn't quit *)
  70.          IF i.closeWindow IN class THEN EXIT END;
  71.       END;
  72.     END;
  73. END ProcessIDCMP;
  74.  
  75. BEGIN   (* main *)
  76.   wPtr := NIL; j := 0;
  77.   wPtr := i.OpenWindow(nw);  (* asm-Fenster öffnen     *)
  78.  
  79.   r.Assert(wPtr#NIL,"Sorry, Fenster geht nicht auf!");
  80.   (* Kontrolle, ob Fenster geöffnet wurde *)
  81.  
  82.                           (*  h  w  xo yo  *)
  83.   i.SetPointer(wPtr,s.ADR(BP),15,14, 0, 0);
  84.                           (*  ^^^^^- diese Werte müssen
  85.                                      stimmen, sonst geht die Grafik
  86.                                      'kaputt'! *)
  87.   rastPortPtr := wPtr.rPort;
  88.   (* Zeiger auf den RastPort besorgen *)
  89.  
  90.   i.PrintIText(rastPortPtr,s.ADR(text),0,0);  (* C-Text *)
  91.   (* Text ins Fenster schreiben *)
  92.  
  93.   ProcessIDCMP; (* Warten auf Close-Gadget *)
  94.  
  95.   (* hier 'hackt's' *)
  96.   i.SetWindowTitles(wPtr,s.ADR(" Don't worry, be happy! "),NIL);
  97.   j := 1;
  98.   QuickNDirty;
  99.   d.Delay(15);
  100.   Clear;
  101.   (* ein 2. Text *)
  102.   i.PrintIText(rastPortPtr,s.ADR(text2),0,0);
  103.   d.Delay(10);
  104.   i.RefreshWindowFrame(wPtr);
  105.  
  106.   ProcessIDCMP; (* Warten auf Close-Gadget *)
  107.   i.ClearPointer(wPtr);
  108.   i.CloseWindow(wPtr);
  109.   wPtr := NIL;
  110.  
  111. CLOSE
  112.  
  113.   IF wPtr  # NIL THEN i.CloseWindow(wPtr) END;
  114.  
  115. END OberonPointer.
  116.